/*
 *                        _oo0oo_
 *                       o8888888o
 *                       88" . "88
 *                       (| -_- |)
 *                       0\  =  /0
 *                     ___/`---'\___
 *                   .' \\|     |// '.
 *                  / \\|||  :  |||// \
 *                 / _||||| -:- |||||- \
 *                |   | \\\  - /// |   |
 *                | \_|  ''\---/''  |_/ |
 *                \  .-\__  '-'  ___/-. /
 *              ___'. .'  /--.--\  `. .'___
 *           ."" '<  `.___\_<|>_/___.' >' "".
 *          | | :  `- \`.;`\ _ /`;.`/ - ` : | |
 *          \  \ `_.   \_ __\ /__ _/   .-` /  /
 *      =====`-.____`.___ \_____/___.-`___.-'=====
 *                        `=---=
 *      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * 
 *            佛祖保佑     永不宕机     永无BUG
 * 
 * @作者: jack-ubuntu
 * @Date: 2024-02-20 15:12:02
 * @LastEditTime: 2024-02-20 15:51:22
 * @最后编辑的作者: jack-ubuntu
 * @文件描述: 
 * @FilePath: /linux/2401/day1/8_read.c
 */
// ctrl + win + i：文件整体注释
// ctr + win + t: 函数注释

/**
 * @函数原型:  ssize_t read(int fd, void *buf, size_t count);
 * @函数功能: 从文件中读数据。读三种数据  字符串 数值  结构体
 * @参数说明: 
 * @       参数1:fd ：文件描述符 
 * @       参数2: buf：读取的数据存放到 以 buf为开始的地址中
 * @       参数3: 想要读取的字节个数
 * @返回值: 实际读取的字节个数   0 ： 没有读到数据。已经到达文件末尾。 文件空。 -1：出错
 */

#include "../header.h"

//read用法
//字符串 数值  结构体
int main(int argc, char const *argv[])
{
    if(argc < 2)
    {
        perror("usage: a.out + filename");
        return -1;
    }
    //打开文件
    int fd = open(argv[1],O_RDONLY);
    if(fd == -1)
    {
        perror("open filename error\n");
        return -2;
    }
    printf("fd = %d\n",fd);

    //读操作：要被读取的文件的结构要清楚：
    //! 1 读字符串
    char buf1[128] = "";
    read(fd,buf1,strlen("hello linux"));
    printf("buf1:%s\n",buf1);
    char buf2[128] = "";
    read(fd,buf2,strlen("hello linux"));
    printf("buf2:%s\n",buf1);
    strcat(buf1,buf2);
    printf("buf1:%s\n",buf1);
    //! 2 读数值
    int nums = 0;
    read(fd,&nums,sizeof(nums));
    printf("nums:%d\n",nums);

    //! 读一个字符出来 '\n' = 10;
    char aaa ;
    read(fd,&aaa,1);
    printf("%d - %c",aaa,aaa);
    //! 3 读结构体
    car_t * pointer = malloc(sizeof(car_t));
    if(pointer == NULL)
    {
        perror("malloc error\n");
        return -3;
    }
    //初始化
    memset(pointer,0,sizeof(car_t));
    read(fd,pointer,sizeof(car_t));
    printf("name:%s\nprince:%d\n",pointer->name,pointer->price);

    free(pointer);
    close(fd);

    return 0;
}
